package com.atguigu.jedis;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

import java.util.HashMap;

/**
 * com.atguigu.jedis
 *
 * @author jing.liang
 * 日期2022-05-04 19:23
 */
public class JedisDemo {

    public static void main(String[] args) {
//        Jedis jedis = getJedis();
        Jedis jedis = getJedisFromPool();
        jedis.setnx("username2", "atguigu");
        String username = jedis.get("username");
        System.out.println(username);

        close(jedis);
    }

    private static JedisPool jedisPool = null;

    public static Jedis getJedisFromPool() {
        if (jedisPool == null) {
            // 创建连接池对象
            String host = "project105";
            int port = 6379;
            JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
            jedisPoolConfig.setMaxTotal(10);  // 最大可用连接数
            jedisPoolConfig.setMaxIdle(5);  // 最大闲置连接数
            jedisPoolConfig.setMinIdle(5);  // 最小闲置连接数
            jedisPoolConfig.setBlockWhenExhausted(true);  // 连接耗尽是否等待
            jedisPoolConfig.setMaxWaitMillis(2000);  // 等待时间
            jedisPoolConfig.setTestOnBorrow(true);  // 取连接的时候进行一下测试ping pong

            jedisPool = new JedisPool(jedisPoolConfig, host, port);
        }
        Jedis jedis = jedisPool.getResource();
        return jedis;
    }

    /**
     * 基于New的方式获取Jedis对象
     *
     * @return
     */
    public static Jedis getJedis() {
        String host = "project105";
        int port = 6379;

        Jedis jedis = new Jedis(host, port);
        return jedis;
    }

    public static void close(Jedis jedis) {
        if (jedis != null) {
            jedis.close();
        }
    }

    /**
     * 测试String类型的常用方法
     */
    public static void testString() {

    }

    /**
     * 测试List类型的常用方法
     */
    public static void testList() {
        Jedis jedis = getJedisFromPool();
        // 调用lpush()
        jedis.lpush("l1", "a", "b", "c", "d");

        jedis.close();
    }

    /**
     * 测试Set类型的常用方法
     */
    public static void testSet() {
        Jedis jedis = getJedisFromPool();
        // 调用sadd()方法
        jedis.sadd("s1","a","b","c","d","a","c");

        jedis.close();
    }

    /**
     * 测试Zset类型的常用方法
     */
    public static void testZset() {

    }

    /**
     * 测试Hash类型的常用方法
     */
    public static void testHash() {
        Jedis jedis = getJedisFromPool();

        HashMap<String, String> map = new HashMap<>();
        map.put("name", "zhangsan");
        map.put("age", "90");
        map.put("addr", "beijing");
        // 调用hset()
        jedis.hset("user:1001", map);

        // 关闭
        jedis.close();
    }
}
